www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouS\ScreenCtrl.cpp

    // ScreenCtrl.cpp: implementation of the ScreenCtrl class.
// Download by http://www.NewXing.com
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ScreenCtrl.h"
#include "command.h"
#include "peersocket.h"
#include "capturescreen.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
bool PeerScreenMouseKey(SOCKET s,WSAEVENT hEvent)
{
	DWORD retLen;
	KEYMOUSE keymouse;
while(1)
{
	//////////取得鼠标键盘值///////////
	if(!PeerRecvDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent,SENDRECV_TIMEOUT))
	{
		return false;
	}
	switch(keymouse.style)
	{
		case PEER_MOUSE_LEFTDOWN:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_LEFTUP:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_RIGHTDOWN:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTDOWN,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_RIGHTUP:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTUP,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_MIDDLEDOWN:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEDOWN,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_MIDDLEUP:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEUP,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_LDBCLICK:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_RDBCLICK:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTDOWN,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTUP,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTDOWN,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTUP,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_MDBCLICK:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEDOWN,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEUP,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEDOWN,keymouse.x,keymouse.y,0,0);
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEUP,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_MOUSE_MOVE:
			mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,keymouse.x,keymouse.y,0,0);
			break;
		case PEER_KEY_DOWN:
			keybd_event(keymouse.nkey,0,KEYEVENTF_EXTENDEDKEY,0);
			break;
		case PEER_KEY_UP:
			keybd_event(keymouse.nkey,0,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);
			break;
	}
}
	return true;
}
/////////////////截取屏幕/////////////////
bool PeerScreenGet(SOCKET s,WSAEVENT hEvent)
{
	DWORD retLen;
	SCREEN screen;
	//////////屏幕///////////
	while(1)
	{
		if(!PeerRecvDataS(s,(char*)&screen,sizeof(screen),&retLen,
						  hEvent,SENDRECV_TIMEOUT))
		{
			return false;
		}
		if(screen.BmpSize==10000) ///客户端已经退出
			break;
		EnterCriticalSection(&csCaptureScreen);
		if(!GetScreenData(8))
		{
			LeaveCriticalSection(&csCaptureScreen);
			return false;
		}
		screen.BmpSize=dwBmpSize;
		screen.BmpInfoSize=dwBmpInfoSize;
		screen.BmpCX=iBmpCX;
		screen.BmpCY=iBmpCY;
		if(!PeerSendDataS(s,(char*)&screen,sizeof(screen),&retLen,
						  hEvent,SENDRECV_TIMEOUT))
		{
			LeaveCriticalSection(&csCaptureScreen);
			return false;
		}
		if(!PeerSendDataS(s,(char*)lpBmpData,dwBmpSize,&retLen,
						  hEvent,SENDRECV_TIMEOUT))
		{
			LeaveCriticalSection(&csCaptureScreen);
			return false;
		}
		LeaveCriticalSection(&csCaptureScreen);
	}
	return true;
}
/////写屏幕///////////
bool PeerScreenWrite(SOCKET s,WSAEVENT hEvent)
{
	DWORD retLen;
	FONTTEXT ftext;
	HDC		hScrDC;
//	HWND deskwnd,listwnd;
//	SystemParametersInfo(SPI_SETWORKAREA,NULL,NULL,SPIF_SENDCHANGE);
	if(!PeerRecvDataS(s,(char*)&ftext,sizeof(ftext),&retLen,
						  hEvent,SENDRECV_TIMEOUT))
	{
		return false;
	}
//	deskwnd=GetDesktopWindow();
//	if(deskwnd)
//	{
//		char classname[50];
//		int ret;
//		for (listwnd = ::GetTopWindow(deskwnd); listwnd != NULL;
//		listwnd = ::GetNextWindow(listwnd, GW_HWNDNEXT))
//		{
//			if(!(ret=GetClassName(listwnd,classname,50)))
//				break;
//			classname[ret]=0;
//			if(!strcmp(classname,"SysListView32"))
//			{
//				InvalidateRect(listwnd,NULL,true);
//				MessageBox(NULL,"dkdk","dkdk",MB_OK);
//				break;
//
//			}
//		}
//	}

		
	hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
	int xScrn,yScrn;

	xScrn = GetDeviceCaps(hScrDC, HORZRES);
	yScrn = GetDeviceCaps(hScrDC, VERTRES);
	RECT rect;
	rect.left=10;rect.top=10;rect.bottom=yScrn-10;rect.right=xScrn-10;
	HFONT font,oldfont;
	font=CreateFontIndirect(&ftext.logfont);
	oldfont=(HFONT)SelectObject(hScrDC,font);
	SetTextColor(hScrDC,ftext.color);
	SetBkMode(hScrDC,TRANSPARENT);
	DrawText(hScrDC,ftext.text,ftext.textcount,&rect,DT_CENTER);
	SelectObject(hScrDC,oldfont);
	DeleteObject(font);
	DeleteDC(hScrDC);
	return true;
}